﻿using AMAP.ServiceInterfaces.Common;
using AMAP.Domain;

namespace AMAP.ServiceClasses.Common
{
    public class DatabaseFactory : Disposable, IDatabaseFactory
    {
        private AMAPModelContainer dataContext;
        private int referencesCount = 0; // nombre de service qui référence la base de données

        public AMAPModelContainer Get()
        {
            referencesCount++;
            return dataContext ?? (dataContext = new AMAPModelContainer());
        }

        protected override void DisposeCore()
        {
            // Mis en commentaire car il y a parfois des exceptions levées du type: dbContext has been Disposed
            // Le problème semble venir du code standard de microsoft! :-(
            /*
            referencesCount--;
            if (referencesCount == 0 && dataContext != null)
                dataContext.Dispose();
             */
        }
    }
}
